本章的目的是学习简单的数据处理,首先给出了一些文本数据,需要将这些文本数据读取,并转换为列表,然后对列表中的数据进行统一格式化,最后进行排序。
本章所需的数据获取地址:获取数据
数据处理
未优化的代码
1 | # 对时间字符串进行格式化,统一形式为mins.secs |
优化的代码
1 | def sanitize(time_str): |
两种排序方法
原地排序(In-place sorting):data.sort()
该方法会对排列数据(data)按指定的顺序进行排序,然后用排好顺序的数据替换掉原有的数据,因此原有的数据顺序会丢失。
复制排序(Copied sorting):sorted(data)
对数据按指定的顺序进行排序,然后返回原数据的一个有序副本。原数据依然保留,只是对副本进行排序
1 | 6,3,1,2,5,4] data = [ |
列表推导式(list comprehension)
使用方法
[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
使用示例
1 | # 将分钟数转化成秒数 |
Set:无序、不可重复
初始化
1.创建一个空的set1
distances = set()
2.为set提供一个数据列表(需要用大括号包围)1
2
310.6,11,8,10.6,"two",7} distances = {
distances
{8, 10.6, 11, 'two', 7} # 自动过滤掉了重复的数据
3.为set指定一个现有的列表1
2
3
42,2,3,5,6] list = [
distances = set(list)
distances
{2, 3, 5, 6}
零碎知识点
list列表分片
列表分片主要用于获取列表的一个子部分,即通过L[x:y]取得并返回列表L在偏移量x到y(包括x不包括y)之间的一个新列表,如下所示:1
21,2,3,4,5,6][2:5] [
[3, 4, 5]
另外,如果偏移量留空,则第一个偏移量默认为列表的头部,第二个默认为末尾:1
21,2,3,4,5,6][:] [
[1, 2, 3, 4, 5, 6]
如果这样做,相当于对原列表做一个浅拷贝。
分片实际还接收第三个参数,其代表步长,默认情况下,该值为1。下面将步长改为2:1
21,2,3,4,5,6][::2] [
[1, 3, 5]
如果把步长设为负值会有什么效果呢?1
21,2,3,4,5,6][::-2] [
[6, 4, 2]
相当于反转了列表,从列表的尾部开始遍历。
工厂函数
工厂函数用于创建某种类型的新的数据项,例如set()
就是一个工厂函数,因为它会创建一个新的集合。